為了將減法以加法的形式進行實作,減少電路開銷(省去減法器)。
一般來說,討論補數會考慮到兩種形式,在基底(Base)為r的條件下,討論以下
舉例來說,以基底為10的數,我們會討論其10的補數和9的補數
定義:有一數字N,基底為r,共有n位數,則
的補數:
的補數:
觀察:的補數 = 的補數
範例1 : 有一數字135( N ),基底為10( r ),共有3( n )位數
的補數 :
的補數 :
的補數 的補數
範例2 : 有一數字,基底為,共有位數
的補數 :
> 10000000
> - 1101100
> ---------
> 0010100
的補數:
> 1111111
> - 1101100
> ---------
> 0010011
的補數 的補數
範例1. 計算
由於M為五位數,N為四位數,兩位數相同才可進行運算,將N改為五位數,變成03250
原式 使用10的補數轉換後
> 72532 > 72532
> - 03250 --> > + 96750
> ------ > -------
> 69282 > 169282 (1為進位,將其捨去)
減掉某一個數事實上就是加上他的補數
範例2. 計算
由於M為四位數,N為五位數,兩位數相同才可進行運算,將M改為五位數,變成03250
原式 使用10的補數轉換後 將計算得到的結果再做10的補數並加上負號
> 03250 > 03250 > 100000
> - 72532 --> > + 27468 --> > - 30718 --> 取負號 --> -69282
> ------ > ------- > -------
> -69282 > 30718 > 69282
範例3. 計算
1.將1000011轉換為補數形式(使用2的補數)
原式 使用2的補數轉換後
> 1010100 > 1010100
> - 1000011 --> > + 0111101
> -------- > ---------
> 0010001 > 10010001 (1為進位,將其捨去)
範例4. 計算
將1010100轉換為補數形式(使用2的補數)
原式 使用2的補數轉換後 將計算得到的結果再做2的補數並加上負號
> 1000011 > 1000011 > 10000000
> - 1010100 --> > + 0101100 --> > - 1101111 --> 取負號 --> -0010001
> -------- > --------- > ---------
> -0010001 > 1101111 > 0010001
為了表示一個有號數,我們將一個數字的最左邊位元做為表示符號的用途,一般來說,0表示正數,1表示負數。
範例1. 使用8 bit 二進位有號數來表示-9
9的二進位無號數形式0001001
這裡我們必須將最左邊的bit用來表示正負號,因此我們只使用7個bit來表示這個數的數值大小,而表示數值大小我們有三種方式
1. 二進位 2. 1的補數 3. 2的補數
0001001 1110110 1110111
1. 有號二進位 2. 有號1的補數 3. 有號2的補數
[1]0001001 [1]1110110 [1]1110111
通常情況我們使用2的補數來做為表示,原因為使用二進位表示法和1的補數表示法,會存在0有兩種不同的表示法,且兩者皆無法表示-8,而2的補數不存在這一些問題,因此我們使用2的補數做為表示有號數的方式。
對一個有n bit的二進位系統而言
無號數範圍 ~
有號數範圍 ~
以4 bit的二進位系統而言
無號數範圍 ~
有號數範圍 ~
我們使用有號8 bits的二進位表示法來表示-9
有號2的補數
9 = 0001001 (只使用7個bit)
-9 = 11110111 (加上符號表示的bit)
2的補數
9 = 00001001 (使用8個bit)
-9 = 11110111
小結:n bits的二補數表示法 = (n - 1)bits有號二的補數表示法
範例1.
十進位 7 bits二進位 有號2的補數
6 0000110 0_0000110
13 0001101 0_0001101
-13 1_1110011(取13對2的補數後加上符號)
------------------------------------------------------
> 6 有號2的補數 > 00000110
> +(-13) --------> > + 11110011
> ------ > ----------
> -7 > 11111001
> ^
> 負數符號 後方7bit為7的2的補數
假設一個8 bit系統的有號二補數的加法
> 65 > 01000001
> + 70 > + 01000110
> ---- > ----------
> 135 > 10000111
加完之後我們會發現值變成負的,這是因為8 bit二埔數系統表示的值範圍在-128 ~ 127,而65 + 70 = 135,這個值超出了表示範圍,因此出現錯誤的結果,這樣的現象稱為溢位。
使用一組4 bit來表示十進位0 ~ 9。
範例 1:
好處:快速將十進位轉換到二進位,有些無法以二進位有限位數表示的小數,如0.2,使用BCD可以非常簡便的表示出來
壞處:浪費記憶體空間,本來4 bit可以表示成16種組合,現在只能表示成10種組合